//创建 TRTCCalling 对象
let options = {
    // SDKAppID: 1400471674 // 接入时需要将0替换为您的 SDKAppID
    SDKAppID: 1400442956
};
const trtcCalling2 = new TRTCCalling(options);
var trtcCalling = trtcCalling2;

var userId ;

// 完成登录
function login(){
    userId = document.getElementsByName("loginUserId")[0].value;
    var userID = userId;
    var userSig = genTestUserSig(userID).userSig
    trtcCalling.login({ userID,userSig});
    init();

}

function init() {

    // 被邀请方事件回调 - 收到邀请通知
    function handleNoResponse({sponsor, userIDList, isFromGroup, inviteData, inviteID}) {
        console.log("=====收到邀请通知")
        console.log("=====inviteData:"+JSON.stringify(inviteData))
        // {"version":0,"callType":"2","callEnd":0,"roomID":51564815}

        if (confirm("【"+sponsor+"】打来电话是否接听？")){
            // 接听
            trtcCalling.accept({
                inviteID, //邀请 ID, 标识一次邀请
                roomID: inviteData.roomID,   //通话房间号 ID
                callType: inviteData.callType  //0-未知， 1-语音通话，2-视频通话
            });
        } else {
            //拒绝
            trtcCalling.reject({
                inviteID, //邀请 ID, 标识一次邀请
                isBusy: true, //是否是忙线中， 0-未知， 1-语音通话，2-视频通话
                callType: 1
            })
        }
    }
    trtcCalling.on(TRTCCalling.EVENT.INVITED, handleNoResponse)

    // 本次通话结束
    function handleCallEnd() {
        console.log("=====本次通话结束")
    }
    trtcCalling.on(TRTCCalling.EVENT.CALL_END, handleCallEnd)

    trtcCalling.on(TRTCCalling.EVENT.CALLING_END, function({ userID, callEnd }) {
        console.log("=====本次通话结束,邀请人："+userID+",时长："+callEnd)
        // to do  关闭通话界面
    })

    // 用户进房
    trtcCalling.on(TRTCCalling.EVENT.USER_ENTER, function({ userID }) {
        console.log("=====用户："+userID+"进入房间")

        // 将本地用户的摄像头数据渲染到指定的 DOM ID 节点里。
        trtcCalling.startLocalView({userID, videoViewDomID:'videoLocal'})

        // 将远端用户的摄像头数据渲染到指定的 DOM ID 节点里。
        trtcCalling.startRemoteView({userID,videoViewDomID:'videoRemote'})

        // 开启本地摄像头
        trtcCalling.openCamera();
    })

    // 用户退出房间
    trtcCalling.on(TRTCCalling.EVENT.USER_LEAVE, function({ userID }) {
        console.log("=====用户："+userID+"退出房间")
    })

    //事件订阅
    let handleInvite = function ({inviteID, sponsor, inviteData}) {
        console.log(`inviteID: ${inviteID}, sponsor: ${sponsor}, inviteData: ${JSON.stringify(inviteData)}`);
    };
    trtcCalling.on('onInvited', handleInvite, this);


    // 邀请方事件回调 - 用户拒绝通话
    function handleInviteeReject({userID}) {
        console.log("=====用户【"+userID+"】已拒绝通话")
    }
    trtcCalling.on(TRTCCalling.EVENT.REJECT, handleInviteeReject)

    // 邀请方事件回调 - 邀请用户无应答
    function handleNoResponse({userID}) {
        console.log("=====用户【"+userID+"】无应答")
    }
    trtcCalling.on(TRTCCalling.EVENT.NO_RESP, handleNoResponse)

    // 邀请方事件回调 - 被邀请方正在通话中，忙线
    function handleNoResponse({userID}) {
        console.log("=====用户【"+userID+"】正忙，请稍后再拨")
    }
    trtcCalling.on(TRTCCalling.EVENT.LINE_BUSY, handleNoResponse)

    // 邀请方事件回调 - 本次通话被取消了
    function handleNoResponse({userID}) {
        console.log("=====用户【"+userID+"】已取消本次通话")
    }
    trtcCalling.on(TRTCCalling.EVENT.CALLING_CANCEL, handleNoResponse)

    // 邀请方事件回调 - 本次通话超时未应答
    function handleNoResponse({userID}) {
        console.log("=====用户【"+userID+"】超时未应答")
    }
    trtcCalling.on(TRTCCalling.EVENT.CALLING_TIMEOUT, handleNoResponse)


    // 监听异常
    let onError = function(error) {
        console.log("异常："+error)
    };
    trtcCalling.on(TRTCCalling.EVENT.ERROR, onError);

    const localStream = TRTC.createStream({ userId, audio: true, video: true });
    localStream
        .initialize()
        .catch(error => {
            console.error('=====初始化本地流失败 ' + error);
        })
        .then(() => {
            console.log('=====初始化本地流成功');
        });

}


    //呼叫某个用户
    function call(){
        var userID = document.getElementsByName("callUserId")[0].value;
        trtcCalling.call({
            userID,  //用户 ID
            type: 2, //通话类型，0-未知， 1-语音通话，2-视频通话
            timeout: 40,  //邀请超时时间, 单位 s(秒)
            port: 888
        });
    }

    //取消呼叫、结束通话
    function cancelCall() {
        trtcCalling.hangup();
    }

    var bol = true;
    // 开启、关闭麦克风
    function setMicMute() {
        trtcCalling.setMicMute(bol) // 开启麦克风
        if (bol){
            bol = false;
            alert("开启麦克风"+!bol)
        } else {
            bol = true;
            alert("关闭麦克风"+!bol)
        }
    }

    //登出接口
    function logout(){
        trtcCalling.logout()
    }

    // 本地摄像头
    $(".camera-local-v").click(function () {

       if($(".camera-local-v").attr("src") == "../static/img/big-camera-on.png"){
           $('.camera-local-v').attr('src', '../static/img/big-camera-off.png');
           trtcCalling.closeCamera();

       }else  if($(".camera-local-v").attr("src") == "../static/img/big-camera-off.png"){
           $('.camera-local-v').attr('src', '../static/img/big-camera-on.png');
           trtcCalling.openCamera();
       }
    })

    // 本地麦克风
    $(".mic-local-v").click(function () {

        if($(".mic-local-v").attr("src") == "../static/img/big-mic-on.png"){
            $('.mic-local-v').attr('src', '../static/img/big-mic-off.png');

        }else  if($(".mic-local-v").attr("src") == "../static/img/big-mic-off.png"){
            $('.mic-local-v').attr('src', '../static/img/big-mic-on.png');
        }
    })

